package com.spring.demo.publicutil.thread;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;

/**
 * 实现多线程代用接口返回数据，减少调用第三方接口总体时间
 *
 * @author youjc
 * @date 2021年12月20日 15:27
 */

/**
 * @author youjc
 * @date 2021年12月20日 15:32
 */
public class ThreadUtil {
    public Map<Integer, Object> callThread(Map<Integer,Map<String, Object>> map){
        CountDownLatch latch = new CountDownLatch(map.size());
        Map<Integer, Object> returnMap = new HashMap();
        // 创建需要调用的线程量
        Thread[] threads = new Thread[map.size()];
        int i = 0 ;
        for (Map.Entry<Integer, Map<String, Object>> entry : map.entrySet()) {
            threads[i] = new Thread(()->{
                try {
                    returnMap.put(entry.getKey(),"调用远程接口返回的数据");
                    latch.countDown();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            });
            i++;
        }

        for (int j = 0; j < threads.length; j++) {
            threads[j].start();
        }
        try {
            latch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return returnMap;
    }
}

